Inheritance Mapping এর ধারণা গাইড ও নোট

Java Technologies - হাইবারনেট (Hibernate) - Hibernate Inheritance Mapping
356

Hibernate ORM (Object-Relational Mapping) ফ্রেমওয়ার্ক, ডেটাবেসের object-oriented ডেটা মডেল এবং relational database টেবিলের মধ্যে সম্পর্ক স্থাপন করতে ব্যবহৃত হয়। Hibernate Inheritance Mapping একটি অত্যন্ত গুরুত্বপূর্ণ ফিচার যা inheritance relationship (উত্তরাধিকার সম্পর্ক) ম্যানেজ করতে সাহায্য করে, যেখানে এক ক্লাস (superclass) এবং তার উপশ্রেণী (subclasses) এর মধ্যে সম্পর্ক স্থাপন করা হয়।

Hibernate এ Inheritance Mapping ব্যবহৃত হয় যখন Java ক্লাসের মধ্যে ইনহেরিটেন্স (inheritance) ব্যবহার করা হয়, এবং আপনাকে সেগুলোকে ডেটাবেসে ম্যাপ করতে হয়। Hibernate তিনটি মূল inheritance strategies প্রদান করে:

  1. Single Table Inheritance (একটি টেবিল ব্যবহার)
  2. Joined Table Inheritance (এবং আলাদা টেবিল ব্যবহার)
  3. Table per Class Inheritance (প্রতিটি ক্লাসের জন্য একটি টেবিল ব্যবহার)

1. Single Table Inheritance

এই স্ট্রাটেজিতে, সমস্ত ইনহেরিটেন্স সম্পর্কিত ক্লাসগুলোর জন্য একটিমাত্র টেবিল ব্যবহার করা হয়। সমস্ত প্রপার্টি (superclass এবং subclass) একটি টেবিলের মধ্যে সংরক্ষিত হয়। @DiscriminatorColumn এবং @DiscriminatorValue অ্যানোটেশনগুলি দিয়ে নির্ধারণ করা হয় কোন ক্লাসের কোন রেকর্ড।

Advantages:

  • Simple: সব ক্লাসের জন্য একটি টেবিল ব্যবহার করে ডেটা সংরক্ষণ করা হয়।
  • Performance: একটি টেবিলের মাধ্যমে সব ইনহেরিটেড ডেটা পাওয়া যায়, তাই কিছু ক্ষেত্রে এটি দ্রুত হতে পারে।

Disadvantages:

  • Unused Columns: উপশ্রেণীগুলির জন্য কিছু কলাম হয়তো ব্যবহার হবে না, কিন্তু সেগুলি টেবিলের অংশ হিসেবে থাকবে, যা wasted space তৈরি করতে পারে।

Example: Single Table Inheritance

ধরা যাক আমাদের একটি Employee ক্লাস রয়েছে, যা FullTimeEmployee এবং PartTimeEmployee নামে দুটি সাবক্লাস ইনহেরিট করে।

Employee Class (Superclass)

@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "employee_type")
public class Employee {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;

    // Getters, Setters, Constructors
}

FullTimeEmployee Class (Subclass)

@Entity
@DiscriminatorValue("FullTime")
public class FullTimeEmployee extends Employee {
    private double salary;

    // Getters, Setters, Constructors
}

PartTimeEmployee Class (Subclass)

@Entity
@DiscriminatorValue("PartTime")
public class PartTimeEmployee extends Employee {
    private double hourlyRate;

    // Getters, Setters, Constructors
}

এখানে, @DiscriminatorColumn এবং @DiscriminatorValue ব্যবহার করা হয়েছে যাতে FullTimeEmployee এবং PartTimeEmployee ক্লাসগুলো আলাদা করে ডেটাবেসে সংরক্ষিত হয়।


2. Joined Table Inheritance

এই স্ট্রাটেজিতে, প্রতিটি ক্লাসের জন্য একটি আলাদা টেবিল তৈরি হয় এবং তাদের মধ্যে একটি join সম্পর্ক থাকে। Superclass টেবিলের মধ্যে সাধারণ প্রপার্টি থাকবে, এবং subclasses তাদের নিজস্ব টেবিলের মধ্যে নির্দিষ্ট প্রপার্টি সংরক্ষণ করবে। এই পদ্ধতিতে normalization উন্নত হয় এবং data redundancy কম থাকে।

Advantages:

  • Normalization: প্রতিটি ক্লাসের জন্য একটি আলাদা টেবিল থাকার কারণে ডেটাবেসে সাধারণ প্রপার্টি পুনরাবৃত্তি করা হয় না।
  • Flexibility: নতুন সাবক্লাস যোগ করতে হলে সহজভাবে টেবিলের মধ্যে নতুন কলাম যোগ করা যায়।

Disadvantages:

  • Performance: টেবিলগুলোর মধ্যে join করতে হয়, তাই এটি slower হতে পারে, বিশেষত যখন অনেক ইনহেরিটেড ক্লাস থাকে।

Example: Joined Table Inheritance

ধরা যাক আমাদের আবারও Employee এবং এর দুটি সাবক্লাস FullTimeEmployee এবং PartTimeEmployee আছে।

Employee Class (Superclass)

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public class Employee {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;

    // Getters, Setters, Constructors
}

FullTimeEmployee Class (Subclass)

@Entity
public class FullTimeEmployee extends Employee {
    private double salary;

    // Getters, Setters, Constructors
}

PartTimeEmployee Class (Subclass)

@Entity
public class PartTimeEmployee extends Employee {
    private double hourlyRate;

    // Getters, Setters, Constructors
}

এখানে, @Inheritance(strategy = InheritanceType.JOINED) ব্যবহার করা হয়েছে, যার মাধ্যমে সব ক্লাসের জন্য আলাদা টেবিল তৈরি করা হয় এবং Employee টেবিলটি অন্য টেবিলগুলির সাথে join হয়ে থাকে।


3. Table per Class Inheritance

এই স্ট্রাটেজিতে, প্রতিটি ক্লাসের জন্য সম্পূর্ণ একটি আলাদা টেবিল তৈরি হয়। প্রতিটি টেবিল তার নিজস্ব প্রপার্টি এবং ইনহেরিটেড প্রপার্টি সংরক্ষণ করে। কোনো join সম্পর্ক থাকে না এবং একেবারে আলাদা টেবিল ব্যবহৃত হয়।

Advantages:

  • Data Isolation: প্রতিটি ক্লাসের জন্য আলাদা টেবিল থাকায় ডেটা সম্পূর্ণ আলাদা এবং সুরক্ষিত থাকে।
  • Performance: কোনো join সম্পর্ক না থাকার কারণে কিছু ক্ষেত্রে এটি দ্রুত হতে পারে।

Disadvantages:

  • Redundancy: সবার জন্য সাধারণ প্রপার্টি পুনরাবৃত্তি হতে পারে, বিশেষত যদি superclass এবং subclasses মধ্যে একাধিক সাধারণ প্রপার্টি থাকে।

Example: Table per Class Inheritance

এখানে, Employee এবং তার সাবক্লাসগুলোর জন্য আলাদা টেবিল তৈরি করা হবে।

Employee Class (Superclass)

@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class Employee {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;

    // Getters, Setters, Constructors
}

FullTimeEmployee Class (Subclass)

@Entity
public class FullTimeEmployee extends Employee {
    private double salary;

    // Getters, Setters, Constructors
}

PartTimeEmployee Class (Subclass)

@Entity
public class PartTimeEmployee extends Employee {
    private double hourlyRate;

    // Getters, Setters, Constructors
}

এখানে, @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) ব্যবহার করা হয়েছে, যার মাধ্যমে Employee, FullTimeEmployee, এবং PartTimeEmployee ক্লাসের জন্য আলাদা টেবিল তৈরি হবে।


সামগ্রিকভাবে Inheritance Mapping

Hibernate এর Inheritance Mapping তিনটি স্ট্রাটেজি মাধ্যমে ডেটাবেসের সাথে অবজেক্ট ইনহেরিটেন্স সম্পর্ক তৈরি করতে সহায়ক:

  1. Single Table Inheritance: একক টেবিল ব্যবহৃত হয়, তবে কিছু ক্ষেত্র মিসিং বা অপ্রয়োজনীয় হতে পারে।
  2. Joined Table Inheritance: প্রতিটি ক্লাসের জন্য একটি আলাদা টেবিল থাকে এবং এই টেবিলগুলোর মধ্যে join করা হয়।
  3. Table per Class Inheritance: প্রতিটি ক্লাসের জন্য সম্পূর্ণ আলাদা টেবিল তৈরি হয় এবং কোন join সম্পর্ক থাকে না।

প্রতিটি স্ট্রাটেজির নিজস্ব সুবিধা এবং অসুবিধা রয়েছে, এবং আপনি আপনার অ্যাপ্লিকেশনটির প্রয়োজন অনুসারে সবচেয়ে উপযুক্ত স্ট্রাটেজি নির্বাচন করতে পারেন। Single Table স্ট্রাটেজি সাধারণত দ্রুত এবং সহজ, কিন্তু Joined এবং Table per Class স্ট্রাটেজি সাধারণত data normalization এর জন্য ভালো।

Content added By
Promotion

Are you sure to start over?

Loading...